Typescript 您所在的位置:网站首页 typescript any unknown Typescript

Typescript

#Typescript | 来源: 网络整理| 查看: 265

Você precisa criar um pacote ou uma função isolada que filtre todas as datas com determinado formato. No entanto, você não sabe a estrutura da coleção.

Considere os seguintes dados:

const data = [ { name: '1990–01-xx' }, { name: '1990–01–01' } ]

E uma validação de data yyyy-mm-dd

const VALIDATE_DATE_REGEXP = new RegExp('\\d{4,4}\\-\\d{2,2}\\-\\d{2,2}', 'g')

Se você não está muito familiarizado com tipos genéricos, pode enfrentar dois problemas (ou mais):

1 — Uso do unknown

Este é um péssimo caso, pois não fornecerá sugestões e não permitirá que você compile o código, pois não sabe se e quando o erro ocorrerá.

No alt text provided for this image

2 — Uso do any

export const my_package_function = (data: any, accessorKey: string) => { return data.filter((item: any) => VALIDATE_DATE_REGEXP.test(item[accessorKey])) }

Este código não fornecerá erros de tipagem, mas o resultado também será do tipo “any”, e você precisará tipar a variável em vez do retorno da função, o que é ruim. Se você passar um argumento que não seja um array, verá que o código irá quebrar.

No alt text provided for this image

Solução:

const my_package_function = (data: T[], accessorKey: keyof T) => { return data.filter((item) => VALIDATE_DATE_REGEXP.test(item[accessorKey])) }

Note que agora é diferente. O “T” (pode ser outra coisa, mas é comum ser usado para coleções e dados dinâmicos) irá referenciar o que você irá usar. Isso fará com que o “data” entenda que é um array daquela tipagem e que o “accessorKey” não seja apenas uma string qualquer, mas sim uma das chaves do objeto.

O código completo ficaria assim e já terá a tipagem correta. A tipagem será exibida sem a necessidade de criar uma interface.

No alt text provided for this image

A tipagem vai aparecer sem você criar uma interface

No alt text provided for this image

fontes:

https://www.typescriptlang.org/docs/handbook/type-inference.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有